#ifndef _HEAD_H_
#define _HEAD_H_

#define DATABASE "mysql.db"
#define err_log(errlog) do{perror(errlog);exit(1);}while(0)

#include <sqlite3.h>
#include <sys/types.h>	       /* See NOTES */
#include <sys/socket.h>

typedef enum {USER=11,ROOT,REGISTER} USER_TYPE; 
typedef enum {ADD=101,DELETE,UPDATE,QUERY} OP_TYPE; 
typedef enum {OK=0,ERROR=-1}ER_TYPE;
typedef struct user_table{

	int  num; 
	char name[20]; 
	char password[20];
	int  age; 
	char telphone[20];
	char address[50];
	
}USER_INFO; 


typedef struct msg{
	USER_TYPE usertype;  //用于判断是user,还是Root登录，或是用户注册 
	OP_TYPE flag ;       // 消息操作类型 
	ER_TYPE  errornum ;  // 客户端请求结果码 
	USER_INFO user_info; // 用于返回用户数据表的信息	
}MSG_T ; 



//msg:传递的数据
//返回值：成功返回结构体大小
//		  返回0 代表断开链接
//		  返回负数 代表接受消息失败
extern int server_recv(int sockfd,MSG_T *msg);

//msg:传递的数据
//返回值：成功返回结构体大小
//		  返回负数 代表发送消息失败
extern int server_send(int sockfd,MSG_T *msg);

//成功返回套接字 失败返回负数
extern int sock_init(int *server_sock);

extern int thread_create(int sockfd);



extern int db_init(char *db_name);


/*
 *函数：_creat_db
 *参数：msg  信息结构指针 
 		db   数据库指针
		errmsg 错误信息指针
 *返回值：-1：打开失败
 		   0：打开成功
 */
int _creat_db(char db_name[20], sqlite3 **db, char **errmsg);

/*
 *函数：_open_db
 *参数：msg  信息结构指针 
 		db   数据库指针
		errmsg 错误信息指针
 *返回值：-1：打开失败
 		  0：打开成功
 */
int _open_db(char db_name[20], sqlite3 **db, char **errmsg);

/*
 *close databass
 * */
int _close_db(sqlite3 *db);

/*
 *函数：_creat_table
 *参数：name 表名称
 *返回值：-1：创建失败
 		   0: 创建成功
 */
int _creat_table(char name[20], sqlite3 *db, char **errmsg);

/*
 * 函数：_query
 * 参数：db：数据库指针
 		 errmsg: 错误消息指针
 * 返回值：-1：查询失败
 			0：查询成功
 */
int _query(MSG_T *msg, sqlite3 *db, char **errmsg);

/*
 *函数：_register
 *参数：msg 信息结构指针
 		db 数据库指针
		errmsg 错误消息指针
 *返回值：-1：删除失败
 		   0：删除成功
 */
int _register(MSG_T *msg, sqlite3 *db, char **errmsg);

/*
 *函数：_modify
 *参数：msg 信息结构指针
 		db 数据库指针
		errmsg 错误消息指针
 *返回值：-1：删除失败
 		   0：删除成功
 */
int _modify(MSG_T *msg,sqlite3 *db, char **errmsg);

/*
 *函数：_delete
 *参数：msg 信息结构指针
 		db 数据库指针
		errmsg 错误消息指针
 *返回值：-1：删除失败
 		   0：删除成功
 */
int _delete(MSG_T *msg,sqlite3 *db, char **errmsg);

/*
 *函数：_add
 *参数：msg 信息结构指针
 		db 数据库指针
		errmsg 错误消息指针
 *返回值：-1：添加失败
 		   0：添加成功
 */
int _add(MSG_T *msg,sqlite3 *db, char **errmsg);

/*
 *函数：_que_root_person //root用户查询函数
 *参数：msg 信息结构指针
 		db  数据库指针
		i   人员数
		errmsg 错误消息指针
 *返回值：-1：添加失败
 		   0：添加成功
 */
int _que_root_person(MSG_T *msg, sqlite3 *db, char **errmsg,int i);

/*
 *函数：_que_login //登录函数
 *参数：msg 信息结构指针
 		db  数据库指针
		errmsg 错误消息指针
 *返回值：-1：添加失败
 		   0：添加成功
 */
int _que_login(MSG_T *msg,sqlite3 *db, char **errmsg);

/*
 *函数：_que_person //user用户查询函数
 *参数：msg 信息结构指针
 		db  数据库指针
		errmsg 错误消息指针
 *返回值：-1：添加失败
 		   0：添加成功
 */
int _que_person(MSG_T *msg, sqlite3 *db, char **errmsg);
#endif
